//从插件内导出createRouter,createWebHashHisory

import { createRouter , createWebHashHistory } from "vue-router";
//导入$axios封装
import $axios from "@/utils/request";
//弹窗
import { ElMessage } from "element-plus";



//1.后台账号可以访问前后台所有页面      
//2.前台账号只能访问前台网页
//3.没有账号可访问部分前台页面

//给路由设置两个属性：
//requireAuth属性：你目前所登录的账号是否有权限访问当前路由：true：当前账号有权限访问这些路由；false：当前账号没有权限访问这些路由
//isCheckLogin属性：主要针对前台网页：true：这些路由必须登录账号后才能访问：false：那些路由不登录也能访问
//requireAuth属性：控制后台账号的访问权限（true：该路由必须时后台账号访问：false：该路由前台账号皆可访问）
//isCheckLogin属性：前台账号的访问权限（true：该路由只能前台账号访问：false：该路由不需要登录可直接访问）

//定义路由表【懒加载，组件在路由地址被调用的时候才会】
const routes = [
   {
    path : '/',
    redirect : '/home'      //当直接访问官网或本地域名时默认重定向到前台首页
   },
   //前台网站
   {
    path : '/home',
    meta : {requireAuth:false}, // 前台商城所有页面皆可用任何账号访问
    //子路由
    children : [
        // 设置子路由首页组件的访问地址为空，相当于当访问/home的时候，也会默认访问该组件页面
        { path:'' , name:'HomeIndex' , component:()=>import('@/views/home/HomeIndex.vue'), meta:{title:'在线商城首页' , isCheckLogin:false} },
        { path:'login' , name:'HomeLogin' , component:()=>import('@/views/home/HomeLogin.vue'), meta:{title:'商品分类管理' , isCheckLogin:false} },
        { path:'dan' , name:'HomeDan' , component:()=>import('@/views/home/HomeDan.vue'), meta:{title:'订单管理' , isCheckLogin:false} },
        { path:'cart' , name:'HomeCart' , component:()=>import('@/views/home/HomeCart.vue'), meta:{title:'会员购物车' , isCheckLogin:false} },
        { path:'lunbo' , name:'HomeLunbo' , component:()=>import('@/views/home/HomeLunbo.vue'), meta:{title:'轮播图管理' , isCheckLogin:false} },
        { path:'shopin' , name:'HomeShopin' , component:()=>import('@/views/home/HomeShopin.vue'), meta:{title:'商品管理' , isCheckLogin:false}},
        { path:'zen' , name:'HomeZen' , component:()=>import('@/views/home/HomeZen.vue'), meta:{title:'添加' , isCheckLogin:false}},
        { path:'user' , name:'HomeUser' , component:()=>import('@/views/home/HomeUser.vue'), meta:{title:'人员' , isCheckLogin:false}},
    ]
   },

   //后台管理系统: 进入默认访问登录页
   {
    path : '/admin',
    children : [
        //设置空路由给登录组件
        { path:'' , name:'AdminLogin' , component:()=>import('@/views/admin/AdminLogin.vue'), meta:{title:'后台系统登录页' , requireAuth:false} },
        { path:'index' , name:'AdminIndex' , component:()=>import('@/views/admin/AdminIndex.vue'), meta:{title:'后台系统首页' , requireAuth:true} },
        
    ]
   }
];

//定义路由器/创建路由器
const router = createRouter({
    //调用路由表，实现router-link的跳转以及router-view的渲染
    //routes ： routes，
    routes,
    //将路由历史模式设置为hash模式（哈希历史）
    history : createWebHashHistory(),
});
//设置全局前置路由守卫(必须获取登录者的身份===>isCheckLogin:true/requireAuth:true;没有获取到登录者的身份===>isCheckLogin:false)
router.beforeEach( (to,from,next)=>{
    //接收身份数据
    let role;
    //判断即将前往的目录路由是否需要验证访问权限：如果需要验证则发起角色访问请求：如果不需要，只需要判断是否需要登录前台账号
    if( to.meta.requireAuth === true ){
        //需要验证当前使用者的访问权限
        //向后端发起请求当前使用者角色的数据
        $axios.post('/role').then( (res)=>{
            //判断状态是否为200===>请求成功
            if( res.code === '200' ){
                //获取到了使用者身份
                role = res.data;
                document.title = to.meta.title;

                //判断
                switch( role ){
                    case 'admin':
                      //有足够的权限访问后台页面
                      next();
                    break;

                    case 'user':
                      //权限不足
                      ElMessage.error('您的权限不足，请前往商城登录，祝您购物愉快！');
                      next('/home')
                    break;
                }



            }else{
                //没有获取到身份
                ElMessage.error('您还不是我们的会员，请注册！');
                next('/home/login');
            }
            
        } ).catch( (err)=> console.log(err) )

    }else{
        //不需要权限限制，只要是个账号都能访问到商城
        //只需要做一个判断：当前路由是否需要登录后才能访问
        if( to.meta.isCheckLogin === true ){
            // 会员缓存提取数据
            let user = sessionStorage.getItem('user');
            // 没有数据
            if( !user ){
                // 强制前往登录页
                next('/home/login')
            }else{
                next();
            }
        }else{
            //不用登录，直接走人
            next();
        }

    }
} )

//导出路由器
export default router;